package  ec.edu.ups.relevo.notificaciones.jms;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.logging.Logger;

import javax.annotation.Resource;
import javax.ejb.MessageDriven;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDrivenContext;
import javax.inject.Inject;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;
import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import ec.edu.ups.relevo.datos.modeloBD.Mensaje;
import ec.edu.ups.relevo.notificaciones.mail.EmailService;
import ec.edu.ups.relevo.notificaciones.sms.SMS;
import ec.edu.ups.relevo.utils.ParametrosApp;


@MessageDriven(mappedName="RelevoMensajeListener", 
			   activationConfig =  {
				@ActivationConfigProperty(propertyName = "destination", 
						  propertyValue = ParametrosApp.COLA_JMS),
	    		@ActivationConfigProperty(propertyName = "acknowledgeMode",
	    					  propertyValue = "Auto-acknowledge"),
	            @ActivationConfigProperty(propertyName = "destinationType",
	            					      propertyValue = "javax.jms.Queue")
				})
public class MessageJMSListener implements MessageListener, Serializable
{
	
	private static final long serialVersionUID = 1L;

	@Resource public MessageDrivenContext mdc;
	@Inject EmailService email;
	@Inject SMS sms;
	
	@Override
	public void onMessage(Message inMessage) //ejecutar automaticamente cada vez q el mensaje esta en la cola
	{
		try 
	    {
	    	ObjectMessage  omsg=(ObjectMessage) inMessage;
	    	Mensaje mensaje=(Mensaje)omsg.getObject();
	    	if(mensaje!=null)
	    		procesarMensaje(mensaje);
	    } catch (JMSException e) 
	    {
//	    	mdc.setRollbackOnly();
	    	e.printStackTrace();
	    } catch (Throwable te) 
	    {
	    	Throwable e = null;
	    	e.printStackTrace();
	    }
	}
	

	/**
	 * Metodo que procesa los mensajes de las peticiones
	 * @param mensaje
	 */
	private void procesarMensaje(Mensaje mensaje)
	{
		System.out.println("Procesando Mensaje\n ID:"+mensaje.getId());
		System.out.println("Asunto:"+mensaje.getAsunto());
		if(mensaje.isAudio())
		{
			try
			{
				
				
			}catch (Exception e)
			{
				e.printStackTrace();
			}
		}
		if(mensaje.isMail())
		{
			try
			{
				System.out.println("Intentando enviar mail");
				email.enviarEmail(mensaje);
				
			}catch (Exception e)
			{
				e.printStackTrace();
			}
		}
		if(mensaje.isSms())
		{
			try
			{
				System.out.println("Intentando enviar sms");
				sms.enviarSMS(mensaje);
				
			}catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}
	
	
}